#include "LinkStack.h"
#include "LinkQueue.h"
#include <iostream>
//快速排序非递归
// int Partition(int*array,int start,int end)
// {
//     int left = start;
//     int right = end;
//     int temp = array[start];
//     while (left < right)
//     {
//         while (array[right] > temp && left < right)
        
//         {
//             right--;
//         }
//         if (left < right)
//         {
//             array[left++] = array[right];
//         }
//         while (array[left] < temp && left < right)
//         {
//             left++;
//         }
//         if (left < right)
//         {
//             array[right--] = array[left];
//         }
//     }
//     array[left] = temp;
//     return left;
// }



// void Fast_no_recur(int *a,int start,int end)
// {
//     LinkStack s;
//     s.Push(start);
//     s.Push(end);
//     while (s.IsEmpty()==false)
//     {
//         int right=s.GetTop();
//         s.Pop();
//         int left =s.GetTop();
//         s.Pop();

//         int mid=Partition(a,left,right);
//         if (left<mid-1)
//         {
//         s.Push(left);
//         s.Push(mid-1);
//         }
//         if (mid+1<right)
//         {   //
//         s.Push(mid+1);
//         s.Push(right);   
//         }
        
//     }
    

// }





int main()
{
    // LinkStack s;
    // for (int i = 0; i <10; i++)
    // {
    //     s.Push(i+1);
    // }
    // while (s.IsEmpty()==false)
    // {

    // std::cout <<s.GetTop()<<" ";
    // s.Pop();

        
    // }
    // std::cout<<std::endl;
    // int num=0;
    // int n=0;
    // std::cin>>num>>n;
    // while (num>0)
    // {   
    //     s.Push(num%n);
    //     num/=n;
    // }
    // while (s.IsEmpty()==false)
    // {   
        
    //     // printf("%x",s.GetTop());
    //     int a=s.GetTop();
    //     if(a>=10)
    //         std::cout<<(char)(a-10+'a');
    //     else
    //         std::cout<<a;
    //     s.Pop();
    // }
    // std::cout<<std::endl;
    // int a[]={3,5,7,2,4,9};
    // Fast_no_recur(a,0,sizeof(a)/sizeof(a[0])-1);
    // for (int i = 0; i <sizeof(a)/sizeof(a[0]) ; i++)
    // {
    //     std::cout<<a[i]<<" ";
    // }
    // std::cout<<std::endl;
    LinkQueue q;
    for (int i = 0; i < 31; i++)
    {
        q.Push(i+1);
    }
    // while (q.IsEmpty()==false)
    // {
    //     std::cout <<q.GetFront()<<" ";
    //     q.Pop();
    // }
    std::cout<<std::endl;
    int count=0;
    while (q.Size()>1)
    {
        int num =q.GetFront();
        q.Pop();
        count++;
        
        if(count==3)
        {   std::cout<<num<<"被杀！"<<std::endl;
            count=0;
        }
        else{
            q.Push(num);
        }
    }
    std::cout<<q.GetFront()<<"活下来!"<<std::endl;

    return 0;

}